tar 命令详解
tar
是 Linux/Unix 系统中用于文件打包和压缩的常用工具,支持将多个文件或目录打包成一个文件(称为 “tar 包”),并可结合压缩算法(如 gzip、bzip2、xz 等)减小文件体积。以下是其核心用法和选项的详细说明。
一、基本语法
tar [选项] [目标文件名] [文件或目录列表]
二、常用选项分类
1. 核心功能选项
选项 | 描述 |
---|---|
-c |
创建一个新的 tar 包(create )。 |
-x |
解压一个已存在的 tar 包(extract )。 |
-t |
查看 tar 包中的文件列表(list )。 |
-f |
指定文件名(file ),该选项必须紧跟文件名,且通常位于选项列表末尾。 |
-v |
显示详细信息(verbose ),如打包 / 解压过程中输出处理的文件名。 |
-p |
保留文件的权限属性(如所有者、权限位等)。 |
-P |
保留文件的绝对路径(默认会去除开头的 / ,使用相对路径)。 |
2. 压缩格式选项
tar
本身不压缩数据,需结合以下选项调用外部压缩工具:
选项 | 压缩格式 | 对应扩展名 | 说明 |
---|---|---|---|
-z |
gzip | .tar.gz |
调用 gzip 压缩(速度快,压缩比中等)。 |
-j |
bzip2 | .tar.bz2 |
调用 bzip2 压缩(压缩比高,速度较慢)。 |
-J |
xz | .tar.xz |
调用 xz 压缩(压缩比最高,速度最慢)。 |
无压缩 | 仅打包不压缩 | .tar |
直接生成未压缩的 tar 包。 |
3. 路径与目录选项
选项 | 描述 |
---|---|
-C <目录> |
指定解压目录(change directory ),解压时切换到目标目录。 |
--exclude <模式> |
排除指定文件或目录(支持通配符,如 --exclude="*.log" )。 |
--strip-components <N> |
解压时去除前 N 级目录结构(如 --strip-components=1 表示去掉第一层目录)。 |
三、经典操作示例
1. 创建压缩包
无压缩打包(仅合并文件):
tar -cvf 备份.tar 文件夹1 文件夹2 file1.txt # 创建名为“备份.tar”的包
-c
:创建包;-v
:显示详细信息;-f
:指定包名。
使用 gzip 压缩(生成
.tar.gz
):tar -zcvf 备份.tar.gz 目标目录/
使用 bzip2 压缩(生成
.tar.bz2
):tar -jcvf 备份.tar.bz2 目标文件.txt
使用 xz 压缩(生成
.tar.xz
):tar -Jcvf 备份.tar.xz 大型文件.iso
2. 解压压缩包
解压到当前目录(自动识别压缩格式):
tar -xvf 备份.tar # 未压缩的 tar 包 tar -xzvf 备份.tar.gz # gzip 压缩包 tar -xjvf 备份.tar.bz2 # bzip2 压缩包 tar -xJvf 备份.tar.xz # xz 压缩包
解压到指定目录:
tar -xzvf 备份.tar.gz -C /目标目录/
3. 查看包内文件列表
tar -tvf 备份.tar.gz # 显示压缩包内的文件和目录结构
4. 向已有包中添加文件
tar -rvf 备份.tar 新文件.txt # 向未压缩的 tar 包中追加文件(仅适用于未压缩的 .tar)
5. 排除特定文件或目录
tar -zcvf 备份.tar.gz --exclude="*.log" --exclude="临时文件/" 目标目录/
6. 保留权限并解压
tar -xvpvf 备份.tar # 解压时保留文件权限属性
7. 去除目录层级
若包内文件路径为 目标目录/子目录/文件.txt
,解压时去掉第一层目录 目标目录
:
tar -xzvf 备份.tar.gz --strip-components=1
四、注意事项
- 选项顺序:
-f
必须紧跟文件名,且通常位于选项列表末尾(如-cvf
而非-fcv
)。 - 压缩格式兼容性:解压时无需指定压缩格式选项(
-z/-j/-J
),tar
会自动识别扩展名。 - 绝对路径风险:打包时若包含绝对路径(如
/etc/
),解压可能会覆盖系统文件,建议使用相对路径。 - 备份场景:定期备份时可结合
--exclude
排除临时文件,并用-p
保留权限。 - 压缩比与速度:xz(-J)压缩比最高但速度最慢,gzip(-z)平衡速度与压缩比,适合日常使用。
五、总结
tar
是文件管理和备份的核心工具,通过组合不同选项可灵活处理打包、压缩、解压等需求。掌握 -c
(创建)、-x
(解压)、-t
(查看)、-f
(指定文件名)和压缩选项(-z/-j/-J
),即可应对大部分场景。进阶用法如权限保留、目录层级处理等可根据实际需求灵活运用。